package com.sojson.util.url;

import org.springframework.util.AntPathMatcher;

/**
 * 路径工具类
 * 
 * @author liu
 * @date 2021-04-14
 */
public class UrlUtil {

    private static final AntPathMatcher ANT_PATH_MATCHER = new AntPathMatcher();

    /**
     * 如果路径是一个规则就返回true(不是常量,带有*或?等符号),否则返回false
     * 
     * @param matcher   表达式
     * @return
     */
    public static boolean isPattern(String matcher) {
        return ANT_PATH_MATCHER.isPattern(matcher);
    }

    /**
     * 匹配路径<BR/>
     * 1.按/分割,严谨匹配,**代表任何数量任意目录,*代表任何数量任意字符,?代表单个任意字符<BR/>
     * 2.当/后跟**的时候可以匹配/前的内容<BR/>
     * 3.当/后跟*的时候必须匹配到/之后的内容<BR/>
     * 4.当/后跟?的时候必须匹配到/之后的内容<BR/>
     * 
     * @param matcher   表达式
     * @param target    目标字符串
     */
    public static boolean match(String matcher, String target) {
        return ANT_PATH_MATCHER.match(matcher, target);
    }

    /**
     * 匹配路径<BR/>
     * 1.按/分割,严谨匹配,**代表任何数量任意目录,*代表任何数量任意字符,?代表单个任意字符<BR/>
     * 2.第二个参数有几个路径就匹配几个路径,每个路径必须都匹配<BR/>
     * 
     * @param matcher   表达式
     * @param target    目标字符串
     */
    public static boolean matchStart(String matcher, String target) {
        return ANT_PATH_MATCHER.matchStart(matcher, target);
    }

    /**
     * 按/分割,返回从第一个开始匹配的字符串,包括后面的字符串一起返回
     * 
     * @param matcher   表达式
     * @param target    目标字符串
     */
    public static String extractPathWithinPattern(String matcher, String target) {
        return ANT_PATH_MATCHER.extractPathWithinPattern(matcher, target);
    }

    /**
     * ???
     * 
     * @param matcher   表达式
     * @param target    目标字符串
     */
    public static String combine(String matcher, String target) {
        return ANT_PATH_MATCHER.combine(matcher, target);
    }

    /**
     * 格式化路径(替换成统一的格式)
     * 
     * @param url
     * @return
     */
    public static String format(String url) {
        return url.replace("\\", "/");
    }

    /**
     * 去除开头的斜线
     * 
     * @param url
     * @return
     */
    public static String removeStartX(String url) {
        return url.substring(1);
    }

    /**
     * 去除开头的斜线(去除前先验证)
     * 
     * @param url
     * @return
     */
    public static String removeStartXVerify(String url) {
        if (url.startsWith("/")) {
            url = url.substring(1);
        }
        return url;
    }

    /**
     * 添加开头的斜线
     * 
     * @param url
     * @return
     */
    public static String addStartX(String url) {
        return "/" + url;
    }

    /**
     * 添加开头的斜线(添加前先验证)
     * 
     * @param url
     * @return
     */
    public static String addStartXVerify(String url) {
        if (!url.startsWith("/")) {
            url = "/" + url;
        }
        return url;
    }

}